package com.cn.wanxi.service.impl;

import com.cn.wanxi.dao.CompanyDao;
import com.cn.wanxi.model.CompanyModel;
import com.cn.wanxi.service.CompanyService;
import com.cn.wanxi.util.Abstract;
import com.cn.wanxi.util.EnumFileName;
import com.cn.wanxi.util.FileNames;
import com.cn.wanxi.util.IOTool;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
 * 为什么要写接口？就是为了实现Java的特征，实现多态，必须实现getCompanyModel方法
 * 理解三层架构？ 逻辑层
 * 1.文件来--创建文件
 * 2.写入数据
 * 3.读取数据
 * 4.封装数据
 * 5.返回数据
 * ----------------------
 * 面向对象？一个对象只做和对象自身相关的代码
 * 一个方法只干一件事情，如果有其他不相干的，
 * 就应该单独写一个方法，如果这个方法和当前的类（对象）无关，
 * 因应该把方法写在其他类里面取
 */
public class CompanyServiceImpl implements CompanyService {
    //    private File file;
//    private String split = "\n";

    @Override
    public CompanyModel getCompanyModel() {

//        companyModel.setLogo("");
//        return companyModel;
//        1.文件来--创建文件
//        String fileName = "company.txt";
        IOTool.createFile(EnumFileName.FILE_NAME_COMPANY.getName());
//        2.写入数据
        List<String> data = getDaoData();
        IOTool.writeData(data);
//        3.读取数据
        String s = IOTool.readData();
//        4.封装数据
//        CompanyModel companyModel = new CompanyModel();
//        companyModel = setData(s);
        return setData(s);
    }


    private List<String> getDaoData() {
//        String[] data = new String[6];
        CompanyDao companyDao = new CompanyDao();
//        data[0] = companyDao.logo;
//        data[1] = companyDao.phone;
//        data[2] = companyDao.net;
//        data[3] = companyDao.email;
//        data[4] = companyDao.address;
//        data[6] = companyDao.version;
//        集合和数组的区别？
//        集合有没有length属性？有没有length方法？
//        数组有没有length属性？有没有length方法？
//        字符串有没有length属性？有没有length方法？
        List<String> list = new ArrayList<>();
        list.add(companyDao.logo);
        list.add(companyDao.phone);
        list.add(companyDao.net);
        list.add(companyDao.email);
        list.add(companyDao.linePhone);
        list.add(companyDao.address);
        list.add(companyDao.version);
        return list;

    }


    /**
     * 通过读取文件得到的数据进行封装成对象
     *
     * @param s
     */
    private CompanyModel setData(String s) {
        System.out.println(s);
//        思考：怎么将字符串进行分段？
        String[] results = s.split(FileNames.SPLIT);
        CompanyModel companyModel = new CompanyModel();
        companyModel.setLogo(results[0]);
        companyModel.setPhone(results[1]);
        companyModel.setNet(results[2]);
        companyModel.setEmail(results[3]);
        companyModel.setLinePhone(results[4]);
        companyModel.setAddress(results[5]);
        companyModel.setVersion(results[6]);
        return companyModel;
    }

//    private String readData() {
//        StringBuilder result = new StringBuilder();
//        try {
//            InputStream inputStream = new FileInputStream(file);
////            int read;
////            for (int i = 0; i < file.length(); i++) {
////                read = inputStream.read();
////                System.out.print((char) read);
////            }
////            运算符？+=
////            String和StringBuilder和StringBuffer的区别？
//            Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
////            Reader reader = new FileReader(file);
//            int read = 0;
////            char[] array = new char[(int) file.length()];
////            int i = 0;
//            while ((read = reader.read()) != -1) {
////                read = reader.read();
////                System.out.print((char) read);
////                array[i] = (char) read;
////                i++;
//                char c = (char) read;
//                result.append(c);
////                result.append(new String(String.valueOf(c).getBytes(), StandardCharsets.UTF_8));
//            }
////            System.out.println(result);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return String.valueOf(result);
//    }

//    public static void main(String[] args) {
//        System.out.println(EnumFileName.PATH.getName());
//    }

//    private void writeData() {
////        输入流和输出流是怎么区分？
////        文件流和缓存流的区别？
////        字节流和字符流的区别？
////        字节？数字几个字节？英文字母几个字节，汉字几个字节？
////        空白字符？
//
//        try {
////            所有引用类型的父类是Object类
////            int  char string
////            ascii码进行对应
//            CompanyDao companyDao = new CompanyDao();
////            System.out.println(Integer.parseInt(companyDao.logo));
//            OutputStream outputStream = new FileOutputStream(file);
//
////            Java的换行有哪些？ \n  \r
//            outputStream.write(companyDao.logo.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(split.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(companyDao.phone.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(split.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(companyDao.net.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(split.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(companyDao.email.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(split.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(companyDao.linePhone.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(split.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(companyDao.address.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(split.getBytes(StandardCharsets.UTF_8));
//            outputStream.write(companyDao.version.getBytes(StandardCharsets.UTF_8));
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//    }

    /**
     * 默认方法应该是私有的，
     * 应该没有返回值
     * 方法名称：应该见名知意
     */
//    private void createFile() {
//        String path = "E:\\wanxi\\step-3\\canyin03-0913\\web";
//        String direcory = "note";
//        String fileName = "company.txt";
//        File fileDircory = new File(path, direcory);
//        fileDircory.mkdirs();
//        file = new File(fileDircory, fileName);
//        try {
//            file.createNewFile();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
}
